#ifndef __LIB_AGORA_CLIENT_ICHANNEL_H__
#define __LIB_AGORA_CLIENT_ICHANNEL_H__

#include <list>
#include "IUser.h"

namespace AgoraClient
{

class	IChannel
{
public:
	virtual const unsigned int	GetId(void) const = 0;
	virtual const unsigned int	GetIdParent(void) const = 0;
	virtual IChannel*			GetParent(void) const = 0;
	virtual void				SetParent(IChannel*) = 0;
	virtual const bool			HaveParent(void) const = 0;
	virtual const std::string&	GetName(void) const = 0;
	virtual void				SetName(const std::string&) = 0;
	virtual const unsigned int	GetMaxNameLength(void) const = 0;
	virtual void				SetMaxNameLength(const unsigned int, bool) = 0;
	virtual const std::string&	GetPassword(void) const = 0;
	virtual void				SetPassword(const std::string&, bool) = 0;
	virtual const unsigned int	GetMaxPasswordLength(void) const = 0;
	virtual void				SetMaxPasswordLength(const unsigned int, bool) = 0;
	virtual const std::string&	GetMotd(void) const = 0;
	virtual void				SetMotd(const std::string&, bool) = 0;
	virtual const unsigned int	GetMaxMotdLength(void) const = 0;
	virtual void				SetMaxMotdLength(const unsigned int, bool) = 0;
	virtual const std::string&	GetDescription(void) const = 0;
	virtual void				SetDescription(const std::string&, bool) = 0;
	virtual const unsigned int	GetMaxDescriptionLength(void) const = 0;
	virtual void				SetMaxDescriptionLength(const unsigned int, bool) = 0;
	virtual const bool			GetVisibility(void) const = 0;
	virtual void				SetVisibility(const bool, bool) = 0;
	virtual const unsigned int	GetMaxUser(void) const = 0;
	virtual void				SetMaxUser(const unsigned int, bool) = 0;
	virtual const unsigned int	GetMaxTalker(void) const = 0;
	virtual void				SetMaxTalker(const unsigned int, bool) = 0;
	virtual const bool			HasPassword(void) const = 0;
	virtual void				SetHasPassword(const bool, bool) = 0;

	virtual void									AddChannelChild(IChannel*) = 0;
	virtual void									RemoveChannelChild(IChannel*) = 0;
	virtual std::list<IChannel*>*				GetChannelChild(void) = 0;
	virtual void									AddUser(IUser*) = 0;
	virtual void									RemoveUser(IUser*) = 0;
	virtual std::list<IUser*>*					GetUser() = 0;
};

}

#endif